A storage is computer-readable media capable of storing data in blocks. Storages face a myriad of threats to the data they store and to their smooth and continuous operation. In order to mitigate these threats, a backup of the data in a storage may be created at a particular point in time to enable the restoration of the data at some future time. Such a restoration may become desirable, for example, if the storage experiences corruption of its stored data, if the storage becomes unavailable, or if a user wishes to create a second identical storage.
A storage is typically logically divided into a finite number of fixed-length blocks. A storage also typically includes a file system which tracks the locations of the blocks that are allocated to each file that is stored in the storage. The file system also tracks the blocks that are not allocated to any file. The file system generally tracks allocated and free blocks using specialized data structures, referred to as file system metadata. File system metadata is also stored in designated blocks in the storage.
Various techniques exist for backing up a source storage. One common technique involves backing up individual files stored in the source storage on a per-file basis. This technique is often referred to as file backup. File backup uses the file system of the source storage as a starting point and performs a backup by writing the files to a destination storage. Using this approach, individual files are backed up if they have been modified since the previous backup. File backup may be useful for finding and restoring a few lost or corrupted files. However, file backup may also include significant overhead in the form of bandwidth and logical overhead because file backup requires the tracking and storing of information about where each file exists within the file system of the source storage and the destination storage.
Another common technique for backing up a source storage ignores the locations of individual files stored in the source storage and instead simply backs up all allocated blocks stored in the source storage. This technique is often referred to as image backup because the backup generally contains or represents an image, or copy, of the entire allocated contents of the source storage. Using this approach, individual allocated blocks are backed up if they have been modified since the previous backup. Because image backup backs up all allocated blocks of the source storage, image backup backs up both the blocks that make up the files stored in the source storage as well as the blocks that make up the file system metadata. Also, because image backup backs up all allocated blocks rather than individual files, this approach does not necessarily need to be aware of the file system metadata or the files stored in the source storage, beyond utilizing minimal knowledge of the file system metadata in order to only back up allocated blocks since free blocks are not generally backed up.
Image backup can be relatively fast compared to file backup because reliance on the file system is minimized. An image backup can also be relatively fast compared to a file backup because seeking during image backup may be reduced. In particular, during image backup, blocks are generally read sequentially with relatively limited seeking. In contrast, during file backup, blocks that make up individual files may be scattered in the source storage, resulting in relatively extensive seeking.
Although image backup may be fast compared to file backup, creation of a base backup of source storage can take hours and possibly days to complete, depending on the size of the source storage. Further, repeatedly backing up an entire source storage may be unnecessary where most of the allocated blocks in the source storage do not frequently change.
One alternative to creating multiple base backups is to employ an incremental backup system. Incremental backup systems generally create a base backup of a source storage and then create multiple incremental backups of the source storage. An incremental backup generally includes only allocated blocks that were modified since the last backup of the source storage. The source storage can later be restored by applying the backups to a restore storage. Specifically, the base backup is first applied to the restore storage and then each successive incremental backup is applied to the restore storage. The structure of the base backup and incremental backups in incremental backup systems conveniently allows for a staged restore, where the base backup and one or more incremental backups are restored to a restore storage in advance of any need for the restore storage. Then, when the restore storage becomes needed, because the source storage becomes unavailable, for example, the final incremental backups can be restored quickly, and the restore storage will be available relatively quickly with a relatively short downtime between the source storage becoming unavailable and the restore storage becoming available.
Another type of image backup system is a decremental backup system, also known as reverse incremental backup system. Decremental backup systems initially create a base backup to capture the state of a source storage at an initial point in time, then update the base backup to capture the state of the source storage at a subsequent point in time by modifying only those blocks in the base backup that were modified between the initial and subsequent points in time. Prior to the updating of the base backup, however, any original blocks in the base backup that correspond to the modified blocks are copied to a decremental backup, thus enabling restoration of the source storage at the initial point in time (by restoring the updated base backup and then restoring the decremental backup) or at the subsequent point in time (by simply restoring the updated base backup). Since restoring a single base backup is generally faster than restoring a base backup and one or more incremental backups, employing a decremental backup system instead of an incremental backup system may enable the most recent backup to be restored more quickly since the most recent backup is always a base backup instead of potentially being an incremental backup.
One common problem that is encountered with decremental backup systems, however, is that the structure of the base backup and decremental backups in decremental backup systems do not conveniently allow for a staged restore of the backups. In particular, unlike incremental backup systems in which incremental backups created subsequent to the staged restore of a base backup or an incremental backup can simply be applied to the restore storage, decremental backups created subsequent to the staged restore of a base backup or a decremental backup in decremental backup systems cannot simply be applied to the restore storage. Therefore, when a restore storage becomes needed, because the source storage becomes unavailable, for example, decremental backup systems may exhibit a relatively long downtime of the restore storage compared to incremental backup systems that include a staged restore capability.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one example technology area where some embodiments described herein may be practiced.